home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 8 / FM Towns Free Software Collection 8.iso / t_os / bb / src / dspstr.s < prev    next >
Encoding:
Text File  |  1994-06-01  |  7.0 KB  |  255 lines

  1. /*
  2.     16 color VRAM charactor dsiplay
  3.         1993.6.19  made by y.ouchi
  4.                 algorithm base on Oh FM (1991.3 by Ken)
  5. */
  6.  
  7. .data
  8. .align 2
  9. /** VRAM font pattern with color code **/
  10. .lcomm    fntcol,1024
  11.  
  12. /** color code 4bit/pixel pattern **/
  13. colptn:    .long    0x00000000,0x11111111,0x22222222,0x33333333
  14.         .long    0x44444444,0x55555555,0x66666666,0x77777777
  15.         .long    0x88888888,0x99999999,0xaaaaaaaa,0xbbbbbbbb
  16.         .long    0xcccccccc,0xdddddddd,0xeeeeeeee,0xffffffff
  17.  
  18. /** 16 color VRAM charactor pattern (4bit/pixel) **/
  19. fntptn:    .long    0x00000000,0xf0000000,0x0f000000,0xff000000    /* 00-03 */
  20.         .long    0x00f00000,0xf0f00000,0x0ff00000,0xfff00000    /* 04-07 */
  21.         .long    0x000f0000,0xf00f0000,0x0f0f0000,0xff0f0000    /* 08-0b */
  22.         .long    0x00ff0000,0xf0ff0000,0x0fff0000,0xffff0000    /* 0c-0f */
  23.         .long    0x0000f000,0xf000f000,0x0f00f000,0xff00f000    /* 10-13 */
  24.         .long    0x00f0f000,0xf0f0f000,0x0ff0f000,0xfff0f000    /* 14-17 */
  25.         .long    0x000ff000,0xf00ff000,0x0f0ff000,0xff0ff000    /* 18-1b */
  26.         .long    0x00fff000,0xf0fff000,0x0ffff000,0xfffff000    /* 1c-1f */
  27.         .long    0x00000f00,0xf0000f00,0x0f000f00,0xff000f00    /* 20-23 */
  28.         .long    0x00f00f00,0xf0f00f00,0x0ff00f00,0xfff00f00    /* 24-27 */
  29.         .long    0x000f0f00,0xf00f0f00,0x0f0f0f00,0xff0f0f00    /* 28-2b */
  30.         .long    0x00ff0f00,0xf0ff0f00,0x0fff0f00,0xffff0f00    /* 2c-2f */
  31.         .long    0x0000ff00,0xf000ff00,0x0f00ff00,0xff00ff00    /* 30-33 */
  32.         .long    0x00f0ff00,0xf0f0ff00,0x0ff0ff00,0xfff0ff00    /* 34-37 */
  33.         .long    0x000fff00,0xf00fff00,0x0f0fff00,0xff0fff00    /* 38-3b */
  34.         .long    0x00ffff00,0xf0ffff00,0x0fffff00,0xffffff00    /* 3c-3f */
  35.         .long    0x000000f0,0xf00000f0,0x0f0000f0,0xff0000f0    /* 40-43 */
  36.         .long    0x00f000f0,0xf0f000f0,0x0ff000f0,0xfff000f0    /* 44-47 */
  37.         .long    0x000f00f0,0xf00f00f0,0x0f0f00f0,0xff0f00f0    /* 48-4b */
  38.         .long    0x00ff00f0,0xf0ff00f0,0x0fff00f0,0xffff00f0    /* 4c-4f */
  39.         .long    0x0000f0f0,0xf000f0f0,0x0f00f0f0,0xff00f0f0    /* 50-53 */
  40.         .long    0x00f0f0f0,0xf0f0f0f0,0x0ff0f0f0,0xfff0f0f0    /* 54-57 */
  41.         .long    0x000ff0f0,0xf00ff0f0,0x0f0ff0f0,0xff0ff0f0    /* 58-5b */
  42.         .long    0x00fff0f0,0xf0fff0f0,0x0ffff0f0,0xfffff0f0    /* 5c-5f */
  43.         .long    0x00000ff0,0xf0000ff0,0x0f000ff0,0xff000ff0    /* 60-43 */
  44.         .long    0x00f00ff0,0xf0f00ff0,0x0ff00ff0,0xfff00ff0    /* 64-47 */
  45.         .long    0x000f0ff0,0xf00f0ff0,0x0f0f0ff0,0xff0f0ff0    /* 68-4b */
  46.         .long    0x00ff0ff0,0xf0ff0ff0,0x0fff0ff0,0xffff0ff0    /* 6c-4f */
  47.         .long    0x0000fff0,0xf000fff0,0x0f00fff0,0xff00fff0    /* 70-73 */
  48.         .long    0x00f0fff0,0xf0f0fff0,0x0ff0fff0,0xfff0fff0    /* 74-77 */
  49.         .long    0x000ffff0,0xf00ffff0,0x0f0ffff0,0xff0ffff0    /* 78-7b */
  50.         .long    0x00fffff0,0xf0fffff0,0x0ffffff0,0xfffffff0    /* 7c-7f */
  51.         .long    0x0000000f,0xf000000f,0x0f00000f,0xff00000f    /* 80-83 */
  52.         .long    0x00f0000f,0xf0f0000f,0x0ff0000f,0xfff0000f    /* 84-87 */
  53.         .long    0x000f000f,0xf00f000f,0x0f0f000f,0xff0f000f    /* 88-8b */
  54.         .long    0x00ff000f,0xf0ff000f,0x0fff000f,0xffff000f    /* 8c-8f */
  55.         .long    0x0000f00f,0xf000f00f,0x0f00f00f,0xff00f00f    /* 90-93 */
  56.         .long    0x00f0f00f,0xf0f0f00f,0x0ff0f00f,0xfff0f00f    /* 94-97 */
  57.         .long    0x000ff00f,0xf00ff00f,0x0f0ff00f,0xff0ff00f    /* 98-9b */
  58.         .long    0x00fff00f,0xf0fff00f,0x0ffff00f,0xfffff00f    /* 9c-9f */
  59.         .long    0x00000f0f,0xf0000f0f,0x0f000f0f,0xff000f0f    /* a0-a3 */
  60.         .long    0x00f00f0f,0xf0f00f0f,0x0ff00f0f,0xfff00f0f    /* a4-a7 */
  61.         .long    0x000f0f0f,0xf00f0f0f,0x0f0f0f0f,0xff0f0f0f    /* a8-ab */
  62.         .long    0x00ff0f0f,0xf0ff0f0f,0x0fff0f0f,0xffff0f0f    /* ac-af */
  63.         .long    0x0000ff0f,0xf000ff0f,0x0f00ff0f,0xff00ff0f    /* b0-b3 */
  64.         .long    0x00f0ff0f,0xf0f0ff0f,0x0ff0ff0f,0xfff0ff0f    /* b4-b7 */
  65.         .long    0x000fff0f,0xf00fff0f,0x0f0fff0f,0xff0fff0f    /* b8-bb */
  66.         .long    0x00ffff0f,0xf0ffff0f,0x0fffff0f,0xffffff0f    /* bc-bf */
  67.         .long    0x000000ff,0xf00000ff,0x0f0000ff,0xff0000ff    /* c0-c3 */
  68.         .long    0x00f000ff,0xf0f000ff,0x0ff000ff,0xfff000ff    /* c4-c7 */
  69.         .long    0x000f00ff,0xf00f00ff,0x0f0f00ff,0xff0f00ff    /* c8-cb */
  70.         .long    0x00ff00ff,0xf0ff00ff,0x0fff00ff,0xffff00ff    /* cc-cf */
  71.         .long    0x0000f0ff,0xf000f0ff,0x0f00f0ff,0xff00f0ff    /* d0-d3 */
  72.         .long    0x00f0f0ff,0xf0f0f0ff,0x0ff0f0ff,0xfff0f0ff    /* d4-d7 */
  73.         .long    0x000ff0ff,0xf00ff0ff,0x0f0ff0ff,0xff0ff0ff    /* d8-db */
  74.         .long    0x00fff0ff,0xf0fff0ff,0x0ffff0ff,0xfffff0ff    /* dc-df */
  75.         .long    0x00000fff,0xf0000fff,0x0f000fff,0xff000fff    /* e0-e3 */
  76.         .long    0x00f00fff,0xf0f00fff,0x0ff00fff,0xfff00fff    /* e4-e7 */
  77.         .long    0x000f0fff,0xf00f0fff,0x0f0f0fff,0xff0f0fff    /* e8-eb */
  78.         .long    0x00ff0fff,0xf0ff0fff,0x0fff0fff,0xffff0fff    /* ec-ef */
  79.         .long    0x0000ffff,0xf000ffff,0x0f00ffff,0xff00ffff    /* f0-f3 */
  80.         .long    0x00f0ffff,0xf0f0ffff,0x0ff0ffff,0xfff0ffff    /* f4-f7 */
  81.         .long    0x000fffff,0xf00fffff,0x0f0fffff,0xff0fffff    /* f8-fb */
  82.         .long    0x00ffffff,0xf0ffffff,0x0fffffff,0xffffffff    /* fc-ff */
  83.  
  84. .text
  85. /*
  86.     charactor color & back color table set
  87.         void    ctblset(chrcol,backcol);
  88.         int        chrcol : charactor color(0-15)
  89.         int        backcol: back color(0-15)
  90. */
  91.     .align    4
  92. .globl    _ctblset
  93. _ctblset:
  94.     pushl    %ebp
  95.     movl    %esp,%ebp
  96.  
  97.     pushl    %esi
  98.     pushl    %edi
  99.  
  100.     movzbl    8(%ebp),%eax
  101.     andl    $0x0000000f,%eax
  102.     shll    $2,%eax
  103.     movl    colptn(%eax),%eax
  104.     movl    %eax,8(%ebp)
  105.  
  106.     movzbl    12(%ebp),%eax
  107.     andl    $0x0000000f,%eax
  108.     movl    colptn(,%eax,4),%eax
  109.     movl    %eax,12(%ebp)
  110.  
  111.     movl    $256,%ecx
  112.     movl    $fntptn,%esi
  113.     movl    $fntcol,%edi
  114.  
  115. ctblp:    lodsl
  116.     movl    %eax,%edx
  117.     notl    %edx
  118.     andl    8(%ebp),%eax
  119.     andl    12(%ebp),%edx
  120.     orl        %edx,%eax
  121.     stosl
  122.     loop    ctblp
  123.  
  124.     popl    %edi
  125.     popl    %esi
  126.     popl    %ebp
  127.     ret
  128.  
  129. /*
  130.     sjis KANJI charactor write to VRAM from color font table
  131.         void    cwrt_kan(ch,addr);
  132.         int        ch  : sjis charactor code
  133.         int        addr: VRAM address
  134. */
  135.     .align    4
  136. .globl    _cwrt_kan
  137. _cwrt_kan:
  138.     pushl    %ebp
  139.     movl    %esp,%ebp
  140.  
  141.     pushl    %fs
  142.     pushl    %gs
  143.     pushl    %es
  144.     pushl    %ds
  145.     pushl    %esi
  146.     pushl    %edi
  147.     pushl    %edx
  148.     pushl    %ebx
  149.  
  150.     movw    $0x104,%ax
  151.     movw    %ax,%es
  152.     movw    $0x110,%ax
  153.     movw    %ax,%fs
  154.     movw    %ds,%ax
  155.     movw    %ax,%gs
  156.  
  157.     movl    8(%ebp),%ebx
  158.     movb    $0x02,%ah
  159.     lcall    %fs:0xa0
  160.  
  161.     movw    $0x100,%ax
  162.     movw    $0x1010,%dx
  163.     lcall    %fs:0xa0
  164.  
  165.     movl    %ss:12(%ebp),%edi
  166.     movl    $fntcol,%ebx
  167.  
  168.     movl    $16,%ecx
  169.  
  170. wt_kn1:    movw    %ds:(%esi),%ax
  171.     xorl    %edx,%edx
  172.     movb    %al,%dl
  173.     movl    %gs:(%ebx,%edx,4),%edx
  174.     movl    %edx,%es:(%edi)
  175.     xorl    %edx,%edx
  176.     movb    %ah,%dl
  177.     movl    %gs:(%ebx,%edx,4),%edx
  178.     movl    %edx,%es:4(%edi)
  179.     addl    $2,%esi
  180.     addl    $512,%edi
  181.     decl    %ecx
  182.     jne        wt_kn1
  183.  
  184.     popl    %ebx
  185.     popl    %edx
  186.     popl    %edi
  187.     popl    %esi
  188.     popl    %ds
  189.     popl    %es
  190.     popl    %gs
  191.     popl    %fs
  192.     popl    %ebp
  193.     ret
  194.  
  195. /*
  196.     ank charactor write to VRAM from color font table
  197.         void    cwrt_ank(ch,addr);
  198.         int        ch  : ank charactor code
  199.         int        addr: VRAM address
  200. */
  201.     .align    4
  202. .globl    _cwrt_ank
  203. _cwrt_ank:
  204.     pushl    %ebp
  205.     movl    %esp,%ebp
  206.  
  207.     pushl    %fs
  208.     pushl    %gs
  209.     pushl    %es
  210.     pushl    %ds
  211.     pushl    %esi
  212.     pushl    %edi
  213.     pushl    %edx
  214.     pushl    %ebx
  215.  
  216.     movw    $0x104,%ax
  217.     movw    %ax,%es
  218.     movw    $0x110,%ax
  219.     movw    %ax,%fs
  220.     movw    %ds,%ax
  221.     movw    %ax,%gs
  222.  
  223.     movl    8(%ebp),%ebx
  224.  
  225.     movw    $0x000,%ax
  226.     movw    $0x0810,%dx
  227.     lcall    %fs:0xa0
  228.  
  229.     movl    %ss:12(%ebp),%edi
  230.     movl    $fntcol,%ebx
  231.  
  232.     movl    $16,%ecx
  233.  
  234. wt_ak1:    movb    %ds:(%esi),%al
  235.     xorl    %edx,%edx
  236.     movb    %al,%dl
  237.     movl    %gs:(%ebx,%edx,4),%edx
  238.     movl    %edx,%es:(%edi)
  239.     incl    %esi
  240.     addl    $512,%edi
  241.     decl    %ecx
  242.     jne        wt_ak1
  243.  
  244.     popl    %ebx
  245.     popl    %edx
  246.     popl    %edi
  247.     popl    %esi
  248.     popl    %ds
  249.     popl    %es
  250.     popl    %gs
  251.     popl    %fs
  252.     popl    %ebp
  253.     ret
  254.  
  255.